package org.Stage1_logformat;

/**
 * @Auther: qingle
 * @Date: 2024/5/27-0:46
 * @Description: 冒泡排序
 * @version: 1.0
 */
public class Code02_BubbleSort {

	/**
	 * 使用冒泡排序算法对整型数组进行排序。
	 *
	 * @param arr 需要排序的整型数组。如果数组为null或长度小于2，则不进行排序。
	 *
	 * 注意：这个方法不返回任何值，它直接在传入的数组上进行排序操作。
	 */
	public static void bubbleSort(int[] arr) {
		// 检查数组是否为空或长度小于2，如果是，则直接返回，不进行排序
	    if (arr == null || arr.length < 2) {
	        return;
	    }
	    // 遍历数组，每次遍历将最大的元素移到数组末尾
	    for (int e = arr.length - 1; e > 0; e--) {
	        // 内层循环，比较相邻元素并进行交换，使得较大的元素逐渐向数组末尾移动
	        for (int i = 0; i < e; i++) {
	            // 如果当前元素大于下一个元素，则交换它们的位置
	            if (arr[i] > arr[i + 1]) {
	                swap(arr, i, i + 1);
	            }
	        }
	    }
	}

	/**
	 * 交换数组中指定位置的两个元素。
	 *
	 * @param arr 整型数组
	 * @param i 要交换的第一个元素的索引
	 * @param j 要交换的第二个元素的索引
	 */
	public static void swap(int[] arr, int i, int j) {
		arr[i] = arr[i] ^ arr[j];
		arr[j] = arr[i] ^ arr[j];
		arr[i] = arr[i] ^ arr[j];
	}

	public static void main(String[] args) {
		int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
		bubbleSort(arr);
		for (int i : arr) {
			System.out.print(i + " ");
		}
	}
}
